import moment from 'moment'; import Linkify from 'linkify-react'; import Tooltip from '@mui/material/Tooltip'; import IconButton from '@mui/material/IconButton'; import Box from '@mui/material/Box'; import Link from '@mui/material/Link'; import Card from '@mui/material/Card'; import Container from '@mui/material/Container'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import TuneIcon from '@mui/icons-material/Tune'; import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; import {useTheme} from '@mui/material/styles'; import {DatePicker} from '@mui/x-date-pickers/DatePicker'; import {PropsWithChildren, useState} from 'react'; import {useTranslation} from 'react-i18next'; import pageUtils from '../../../lib/pageUtils'; import DetailsLink from '../../../containers/DetailsLink'; import ShareEvent from '../../../containers/ShareEvent'; import PlaceInput from '../../../containers/PlaceInput'; import LangSelector from '../../../components/LangSelector'; import usePermissions from '../../../hooks/usePermissions'; import useEventStore from '../../../stores/useEventStore'; import useToastStore from '../../../stores/useToastStore'; import EventLayout, {TabComponent} from '../../../layouts/Event'; import { EventByUuidDocument, useUpdateEventMutation, } from '../../../generated/graphql'; interface Props { eventUUID: string; announcement?: string; } const Page = (props: PropsWithChildren) => { return ; }; const DetailsTab: TabComponent = ({}) => { const {t} = useTranslation(); const { userPermissions: {canEditEventDetails}, } = usePermissions(); const theme = useTheme(); const [updateEvent] = useUpdateEventMutation(); const addToast = useToastStore(s => s.addToast); const setEventUpdate = useEventStore(s => s.setEventUpdate); const event = useEventStore(s => s.event); const [isEditing, setIsEditing] = useState(false); if (!event) return null; const onSave = async e => { try { const {uuid, ...data} = event; const { id, travels, waitingPassengers, __typename, administrators, passengers, ...input } = data; await updateEvent({ variables: { uuid, eventUpdate: { ...input, }, }, refetchQueries: ['eventByUUID'], }); setIsEditing(false); } catch (error) { console.error(error); addToast(t('event.errors.cant_update')); } }; const modifyButton = isEditing ? ( ) : ( setIsEditing(true)}> ); return ( {t('event.details')} {canEditEventDetails() && modifyButton} {(isEditing || event.name) && ( {t('event.fields.name')} {isEditing ? ( setEventUpdate({name: e.target.value})} name="name" id="EditEventName" /> ) : ( {event.name} )} )} {(isEditing || event.address) && ( {t('event.fields.date')} {isEditing ? ( setEventUpdate({ date: !date ? null : moment(date).format('YYYY-MM-DD'), }) } /> ) : ( {moment(event.date).format('DD/MM/YYYY')} )} )} {(isEditing || event.address) && ( {t('event.fields.address')} {isEditing ? ( setEventUpdate({ address: place, latitude, longitude, }) } /> ) : ( e.preventDefault} > {event.address} )} )} {(isEditing || event.description) && ( {t('event.fields.description')} {isEditing ? ( setEventUpdate({description: e.target.value}) } id={`EditEventDescription`} name="description" /> ) : ( {event.description} )} )} {(isEditing || event.lang) && ( {t('event.fields.lang')} {isEditing ? ( setEventUpdate({lang})} /> ) : ( {t(`PROTECTED.languages.${event.lang}`)} )} )} {!isEditing && ( )} ); }; export const getServerSideProps = pageUtils.getServerSideProps( async (context, apolloClient) => { const {uuid} = context.query; const {host = ''} = context.req.headers; let event = null; // Fetch event try { const {data} = await apolloClient.query({ query: EventByUuidDocument, variables: {uuid}, }); event = data?.eventByUUID?.data; } catch (error) { return { notFound: true, }; } return { props: { eventUUID: uuid, metas: { title: event?.attributes?.name || '', url: `https://${host}${context.resolvedUrl}`, }, }, }; } ); export default Page;